#ifndef __XMLPARSER_H__
#define __XMLPARSER_H__
#define MAX_LINE_SIZE 255;

#include "Document.h"

struct Time
{
 int dia,mes,anio,hora,minuto,segundo;
//	int d,m,y;
};



Document parse(char* filename);

int parseFile(char* filename,Document* doc, Document* defMandatory,Document* defOptional);

char* mapValidationCode(int validationCode);



void addElement(Element* elem);



// @SEBASTIAN - 04/09/2008 01:15
//int validateLine(char* line);
int chequeaAlfanumericoConEspacios (char caracter);
int chequeaAlfanumericoSinEspacios (char caracter);
int validateLine(char *line, char *salida);


// Levanta el file y lo almacena en un char*
int loadFileAsString (char* filename, char** dataStr, long* dataLength);

// Punto de entrada al parsing. Empieza a caminar el string que representa al xml levantado del archivo.
int parseXMLString(char* dataStr,long dataLength, Document* doc, Document* defMandatory, Document* defOptional);

// identifica que tiene el parser en la mano. Podria ser un comentario, un elemento, etc. 
int identifyToken(char** str);

// Se fija si el elemento esta entre los permitidos por el parser segun su configuracion
int isElementAllowed(Element* elem,Element* parentElem,Document* defMandatory,Document* defOptional);

//Obtiene el nombre del tag.
int getTagName(char** dataStr, char* tagNameCr);

//Obtener los atributos del tag
int getAttributes(char** dataStr, int tNameSize, Element* parentElem);

// Crea un elemento
int createElem(char** dataStr,Document* doc, Document* defMandatory, Document* defOptional,Element* parent);
int createElemRecursive(char** dataStr,Document* doc, Document* defMandatory, Document* defOptional,Element* parent,int depth);

void skipElement(char** dataStr);
				 
int checkElemMandatoryChilds(Element* elem,Document* defMandatory);

int checkForDuplicateId(Element* elem,Element* parent);

void getErrorFileName(char* salida);


	

#endif